﻿///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2019, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются 
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////

'use strict'

// Example:
// wscript.exe <this-file> /ConnectionString:"File='C:\1c\db\ssl\master';Usr='Администратор';Pwd=''" /COMConnectorName:"v83.COMConnector" /FixFileNames:"" /RemoveFixNames:"e16605f0-ddc8-4ed2-be25-d572043a1a32"

var fso = new ActiveXObject('Scripting.FileSystemObject')
var ForWriting = 2 // Open a file for writing.
var OpenAsASCII = 0
var outf = null

var ConnectionString
var ConnectionStringArray
var hiddenCS
var COMConnectorName
var fixFileNames
var removeFixNames
var Action
var outFileName

var COMConnector
var connection

var mainEvent = '[СообщениеОсновноеСобытие]'

try {

  ConnectionString = WScript.Arguments.Named.Item('ConnectionString')
  COMConnectorName = WScript.Arguments.Named.Item('COMConnectorName')
  fixFileNames = WScript.Arguments.Named.Item('FixFileNames')
  removeFixNames = WScript.Arguments.Named.Item('RemoveFixNames')
  Action = WScript.Arguments.Named.Item('Action')
  outFileName = WScript.Arguments.Named.Item('Out')

  outf = fso.OpenTextFile(outFileName, ForWriting, true, OpenAsASCII)

} catch (ex) {

  if (outf != null) {
    outf.WriteLine(mainEvent + ": [СообщениеОтказИнициализации]: " + ex.message)
  }
  WScript.Quit(1)

}

try {

  if (outf != null) {
    outf.WriteLine(mainEvent + ": [СообщениеСозданиеОбъектаCOMСоединителя]")
  }
  COMConnector = new ActiveXObject(COMConnectorName)
  
} catch (ex) {

  if (outf != null) {
   outf.WriteLine(mainEvent + ": [СообщениеОтказСозданияОбъектаCOMСоединителя]: " + ex.message)
  }
  WScript.Quit(1)

}

try {
    
  ConnectionStringArray = ConnectionString.split(';')
  
  for (var i = 0; i < ConnectionStringArray.length; i++) {
    if (ConnectionStringArray[i].slice(0,4) == "Pwd=") {
      ConnectionStringArray[i] = "Pwd='******'"
    }
  }
  
  hiddenCS = ConnectionStringArray.join(';')

  if (outf != null) {
    outf.WriteLine(mainEvent + ": [СообщениеУстановкаСоединенияСБазой]: " + hiddenCS)
  }  
  connection = COMConnector.Connect(ConnectionString)

} catch (ex) {

  if (outf != null) {
    outf.WriteLine(mainEvent + ": [СообщениеОтказСоединенияСБазойОбщее] " + hiddenCS + ": " + ex.message)
  }
  WScript.Quit(1)

}

try {

  if (Action == 'RemoveAll') {

    if (outf != null) {
      outf.WriteLine(mainEvent + ": [СообщениеВызовУдалитьИсправленияИзСкрипта]")
    }
    connection.ОбновлениеКонфигурацииВызовСервера.УдалитьИсправленияИзСкрипта();

  } else {

    if (outf != null) {
      outf.WriteLine(mainEvent + ": [СообщениеВызовОбновитьИсправленияИзСкрипта]")
    }
    connection.ОбновлениеКонфигурацииВызовСервера.ОбновитьИсправленияИзСкрипта(fixFileNames, removeFixNames)

  }

} catch (ex) {

  if (outf != null) {    
    outf.WriteLine(mainEvent + ": [СообщениеОшибка]" + ex.message)
  }
  WScript.Quit(1)

}